package com.z.system.service;

import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import com.z.system.dto.UserDTO;
import com.z.system.model.User;

/**
 * 用户服务接口
 */
public interface UserService {

    /**
     * 获取当前登录用户
     */
    User getCurrentUser();

    /**
     * 根据ID获取用户
     */
    User getUserById(UUID id);

    /**
     * 根据用户名获取用户
     */
    User getUserByUsername(String username);

    /**
     * 根据工号获取用户
     */
    User getUserByUserSn(String userSn);

    /**
     * 分页获取用户列表
     */
    Page<UserDTO> getUsers(Pageable pageable, Map<String, Object> params);

    /**
     * 获取用户列表
     */
    List<User> getUsers(Map<String, Object> params);

    /**
     * 保存用户
     */
    User saveUser(User user);

    /**
     * 更新用户
     */
    User updateUser(User user);

    /**
     * 删除用户
     */
    void deleteUser(UUID id);

    /**
     * 批量删除用户
     */
    void deleteUsers(Set<UUID> ids);

    /**
     * 更新用户状态
     */
    void updateUserStatus(UUID id, Integer enable);

    /**
     * 重置用户密码
     */
    void resetPassword(UUID id, String password);

    /**
     * 修改用户密码
     */
    void changePassword(String oldPassword, String newPassword);

    /**
     * 分配用户角色
     */
    void assignRoles(UUID userId, Set<UUID> roleIds);

    /**
     * 获取用户角色ID集合
     */
    Set<UUID> getUserRoleIds(UUID userId);
}